﻿// code04110300.cpp : 类型转换
// 显式转换 static_cast/const_cast/reinterpret_cast

#include <iostream>
using namespace std;

int main()
{
    //static_cast:只要不包含底层const，都可以使用
    //1 计算类型间的显式转换
    int i, j;
    double slope = static_cast<double>(j);

    //2 void类型指针的转换
    double d;
    void* p = &d;
    double* dp = static_cast<double*>(p);

    //const_cast：只能改变运算对象的底层const，改变不了类型
    //常量转换为非常量
    const char* pc;
    char* p1 = const_cast<char*>(pc);//不会报错,但是p1写值是被允许的。

    //const_cast 无法转换类型
    const char* cp;
    char* q = static_cast<char*>(cp);//报错！static_cast无法转换底层const限定
    static_cast<string>(cp);//正常
    const_cast<string>(cp);//报错！const_cast无法转换类型

    //reinterpret_cast:底层上位模式的转换
    //转换指针类型----非常危险
    int* ip;
    char* pc1 = reinterpret_cast<char*>(ip);//一个char类型指针指向一个int类型的对象，类似C风格的强制转换
    string str(*pc1);//报错！
    
    return 0;

}

